package com.kt.silenceinstalldemo

import android.util.Log
import java.io.BufferedReader
import java.io.Closeable
import java.io.DataOutputStream
import java.io.InputStreamReader

/**
 * @Author Xzh
 * @Date 2025/1/24
 * @Description
 */
object AppInstallHelper {

    /**
     * 拥有root权限使用adb命令安装
     */
    fun rootInstall(filePath : String){

    }

    /**
     * 执行adb命令
     */
     fun runRootCmd(cmd : String) : String{
        var grandted : Boolean // 用于记录命令是否成功执行的标志
        //用于向进程写入命令的输入流
        var outputStream : DataOutputStream? = null
        //用于读取进程错误
        var reader : BufferedReader? = null

        var message : String = ""
        try {
            //运行"su"命令。获取root权限
            val process = Runtime.getRuntime().exec("su")
            //获取输出流
            outputStream = DataOutputStream(process.outputStream)
            // 向进程写入要执行的命令
            outputStream.writeBytes(cmd+"\n")
            // 写入 "exit" 命令，以便结束进程
            outputStream.writeBytes("exit\n")
            // 刷新输出流，确保所有命令都已写入
            outputStream.flush()
            // 等待进程完成执行
            process.waitFor()

            // 读取进程的错误流
            reader =  BufferedReader(InputStreamReader(process.getErrorStream()));
            grandted = true; // 假设命令执行成功


            // 读取错误流中的信息
            val msg = reader.readLine()
            if (msg != null) {
                // 如果有错误信息，则记录日志
               Log.e("",msg)
                message = msg
            }

        }catch (e :Exception){
            // 捕获异常，命令执行失败
            e.printStackTrace();
            grandted = false;
        }finally {
            // 关闭输出流和读取器
            closeIO(outputStream);
            closeIO(reader);
        }
        return if (grandted){message}else{""}
    }

    /**
     * 关闭流
     */
    private fun closeIO(closeable: Closeable?) {
        try {
            closeable?.close()
        } catch (ignored: java.lang.Exception) {
        }
    }


}